/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.ufc.si.sistema.model;

import br.ufc.si.config.HibernateUtil;
import br.ufc.si.sistema.to.TipoBolsaTO;
import java.util.List;
import org.hibernate.Criteria;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.criterion.Restrictions;

public class TipoBolsaDAO {

    public static void main(String[] args) {
        /*
        Chamando Inserir
        TipoBolsaTO tipobolsa = new TipoBolsaTO();
        tipobolsa.setTipo_bolsa_id(0);
        tipobolsa.setTipo("Estenção");
        tipobolsa.setTitulo("Pet222");
        System.out.println("teste222");           
        inserir(tipobolsa);
         */


        /*
        Chamando Atualizar
        Transaction tx = null;  
        Session session = null;  
        session = HibernateUtil.getSession();
        tx = session.beginTransaction();  
        int id = 1;
        TipoBolsaTO tipoBolsaTO = ( TipoBolsaTO ) session.get( TipoBolsaTO.class, id );
        tipoBolsaTO.setTitulo("testando23");  
        atualizar(tipoBolsaTO);
         */

        /*
        Chamar Deletar
        Transaction tx = null;  
        Session session = null;  
        session = HibernateUtil.getSession();
        tx = session.beginTransaction();  
        int tipo_bolsa_id = 2;
        TipoBolsaTO tipoBolsaTO = ( TipoBolsaTO ) session.get( TipoBolsaTO.class, tipo_bolsa_id );
        deletar(tipoBolsaTO);
         */
        listarTodos();
    }

    public static void inserir(TipoBolsaTO tipoBolsaTO) throws HibernateException {
        Transaction tx = null;
        Session session = null;
        try {
            session = HibernateUtil.getSession();
            tx = session.beginTransaction();
            session.save(tipoBolsaTO);
            tx.commit();
        } catch (HibernateException e) {
            tx.rollback();
        } finally {
            session.close();
        }

    }

    public static void atualizar(TipoBolsaTO tipoBolsaTO) throws HibernateException {
        Transaction tx = null;
        Session session = null;
        try {
            session = HibernateUtil.getSession();
            tx = session.beginTransaction();
            session.update(tipoBolsaTO);
            tx.commit();
        } catch (HibernateException e) {
            tx.rollback();
        } finally {
            session.close();
        }

    }

    public static void deletar(TipoBolsaTO tipoBolsaTO) throws HibernateException {
        Session session = null;
        Transaction tx = null;
        try {
            session = HibernateUtil.getSession();
            tx = session.beginTransaction();
            session.delete(tipoBolsaTO);
            tx.commit();
        } catch (HibernateException e) {
            tx.rollback();
        } finally {
            session.close();
        }
    }

    public static List<TipoBolsaTO> listarTodos() throws HibernateException {

        Session session = HibernateUtil.getSession();
        Transaction tx = session.beginTransaction();
        tx.begin();
        Criteria criteria = HibernateUtil.getSession().createCriteria(TipoBolsaTO.class);
        List<TipoBolsaTO> lista = criteria.list();
        System.out.println(lista);
        int tamanho_lista = lista.size();
        for (int i = 0; i < tamanho_lista; i++) {
            TipoBolsaTO tipoBolsaTO = lista.get(i);
            System.out.println(tipoBolsaTO.getTipo_bolsa_id() + "," + tipoBolsaTO.getPrograma());
        }
        tx.commit();
        return lista;
    }

    public static List<TipoBolsaTO> listar_by_Pro_Reitoria(String busca) {
        Session session = HibernateUtil.getSession();
        Transaction tx = session.beginTransaction();

        busca = "%" + busca + "%";
        tx.begin();
        Criteria criteria = HibernateUtil.getSession().createCriteria(TipoBolsaTO.class);
        criteria.add(Restrictions.like("pro_reitoria", (busca)));
        List<TipoBolsaTO> lista = criteria.list();
        tx.commit();
        return lista;

    }

    public static List<TipoBolsaTO> listar_by_Programa(String busca) {
        
        Session session = HibernateUtil.getSession();
        Transaction tx = session.beginTransaction();
        tx.begin();
        busca = "%" + busca + "%";
        Criteria criteria = HibernateUtil.getSession().createCriteria(TipoBolsaTO.class);
        criteria.add(Restrictions.like("programa", (busca)));
        List<TipoBolsaTO> lista = criteria.list();
        tx.commit();
        
        return lista;

    }
}
